import { ForexDanaClassifier } from '../services/ForexDanaClassifier';
import { ExtractionResult } from '../types';
import * as fs from 'fs';
import * as path from 'path';

/**
 * 将翻译提取结果转换为模块化结构
 * @param resultFilePath 翻译提取结果文件路径
 */
async function transformToModules(resultFilePath: string): Promise<void> {
  try {
    // 1. 检查文件是否存在
    if (!fs.existsSync(resultFilePath)) {
      console.error(`错误: 文件 ${resultFilePath} 不存在`);
      return;
    }
    
    console.log(`正在读取翻译提取结果: ${resultFilePath}`);
    
    // 2. 读取翻译提取结果
    const extractionResult: ExtractionResult = JSON.parse(
      fs.readFileSync(resultFilePath, 'utf-8')
    );
    
    // 3. 创建分类器
    const classifier = new ForexDanaClassifier();
    
    // 4. 转换为模块树
    console.log('正在转换为模块树...');
    const result = classifier.transformToModules(extractionResult.translations);
    
    // 5. 生成模块化报告
    console.log('正在生成模块化报告...');
    const report = classifier.generateModuleReport(extractionResult.translations);
    
    // 6. 保存结果
    const outputDir = path.join(path.dirname(resultFilePath), 'module-output');
    if (!fs.existsSync(outputDir)) {
      fs.mkdirSync(outputDir, { recursive: true });
    }
    
    // 保存模块树
    fs.writeFileSync(
      path.join(outputDir, 'module-tree.json'),
      JSON.stringify(result.moduleTree, null, 2),
      'utf-8'
    );
    
    // 保存报告
    fs.writeFileSync(
      path.join(outputDir, 'module-report.txt'),
      report,
      'utf-8'
    );
    
    // 保存统计信息
    fs.writeFileSync(
      path.join(outputDir, 'statistics.json'),
      JSON.stringify({
        transform: result.transformStatistics,
        reference: result.referenceStatistics
      }, null, 2),
      'utf-8'
    );
    
    console.log('完成！');
    console.log(`模块树已保存到: ${path.join(outputDir, 'module-tree.json')}`);
    console.log(`模块报告已保存到: ${path.join(outputDir, 'module-report.txt')}`);
    console.log(`统计信息已保存到: ${path.join(outputDir, 'statistics.json')}`);
    
    // 打印模块统计摘要
    console.log('\n=== 模块树统计摘要 ===');
    console.log(`总模块数: ${result.transformStatistics.totalModules}`);
    console.log(`总翻译键数: ${result.transformStatistics.totalKeys}`);
    console.log(`最大模块深度: ${result.transformStatistics.maxDepth}`);
    console.log(`总引用数: ${result.referenceStatistics.totalReferences}`);
    
  } catch (error) {
    console.error('转换出错:', error);
  }
}

// 如果从命令行运行，处理参数
if (require.main === module) {
  const args = process.argv.slice(2);
  if (args.length === 0) {
    console.error('请提供翻译提取结果文件路径');
    process.exit(1);
  }
  
  const resultFilePath = args[0];
  transformToModules(resultFilePath).catch(console.error);
}

export { transformToModules }; 